#pragma once

#include <map>
#include <string>
#include <list>
#include <memory>
#include "utils/common_ptr.h"

class DbType
{
public:
  static DbType other;
  static DbType jtds;
  static DbType hsql;
  static DbType db2;
  static DbType postgresql;

  static DbType sqlserver;
  static DbType oracle;
  static DbType mysql;
  static DbType mariadb;
  static DbType derby;

  static DbType hive;
  static DbType h2;
  static DbType dm;
  static DbType kingbase;
  static DbType gbase;

  static DbType oceanbase;
  static DbType informix;
  static DbType odps;
  static DbType teradata;
  static DbType phoenix;

  static DbType edb;
  static DbType kylin;
  static DbType sqlite;
  static DbType ads;
  static DbType presto;

  static DbType elastic_search;
  static DbType hbase;
  static DbType drds;

  static DbType clickhouse;
  static DbType blink;
  static DbType antspark;
  static DbType oceanbase_oracle;
  static DbType polardb;

  static DbType ali_oracle;
  static DbType mock;
  static DbType sybase;
  static DbType highgo;
  /**
   * 非常成熟的开源mpp数据库
   */
  static DbType greenplum;
  /**
   * 华为的mpp数据库
   */
  static DbType gaussdb;
  static DbType trino;
  static DbType oscar;
  static DbType tidb;
  static DbType tydb;
  static DbType starrocks;
  static DbType ingres;
  static DbType cloudscape;
  static DbType timesten;
  static DbType as400;
  static DbType sapdb;
  static DbType kdb;
  static DbType log4jdbc;
  static DbType xugu;
  static DbType firebirdsql;
  static DbType JSQLConnect;
  static DbType JTurbo;
  static DbType interbase;
  static DbType pointbase;
  static DbType edbc;
  static DbType mimer;

  DbType() {}
  DbType(DbType *dbType);
  DbType(uint64_t mask, string_ptr name);
  ~DbType() {}
  uint64_t mask;
  string_ptr name;
  bool operator==(DbType &rgt);
  static DbType_ptr valueOf(string_ptr dbType);
  static uint64_t of(DbType_list_ptr features);
};